package com.zbc.demo.enums;


import com.zbc.demo.exception.BaseException;

/**
 * 自定异常码
 *
 * @author 万恶的沫白
 * @date 2021/8/13
 */
public enum GlobalExceptionEnum {


    /**
     * 400 INVALID REQUEST - [POST/PUT/PATCH]：用户发出的请求有错误，服务器没有进行新建或修改数据的操作，该操作是幂等的。
     */

    REQUEST_INVALID_PARAM(4001, "invalid param", "无效参数"),


    /**
     * 401 Unauthorized - [*]：表示用户没有认证（令牌、用户名、密码错误）。
     */

    NOT_LOGGED_IN(4011, "not logged in", "未登录"),

    PASSWORD_INCORRECT(4012, "password incorrect", "密码错误"),

    NO_ACCESS_TOKEN(4013, "no access token", "没有访问令牌"),

    EXPIRED_ACCESS_TOKEN(4014, "expired access token", "过期的访问令牌"),


    /**
     * 403 Forbidden - [*] 表示用户得到认证（与401错误相对），但是访问是被禁止的（没有访问资源的权限）。
     */
    AUTH_EXCEPTION(4031, "auth exception", "权限错误"),

    /**
     * 404 NOT FOUND - [*]：用户发出的请求针对的是不存在的记录，服务器没有进行操作，该操作是幂等的。
     */
    NOT_FOUNT(4041, "not found", "未找到"),


    /**
     * 410 Gone -[GET]：用户请求的资源被永久删除，且不会再得到的。
     */
    DELETED(4101, "deleted", "已删除"),


    /**
     * 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时，发生一个验证错误。
     */

    EXISTED(4221, "existed", "已存在"),

    /**
     * 500 INTERNAL SERVER ERROR - [*]：服务器发生错误，用户将无法判断发出的请求是否成功。
     */

    INTERNAL_SERVER_ERROR(5001, "internal server error", "系统内部错误"),

    UNKNOWN_SERVER_ERROR(5002, "unknown server error", "系统未知错误"),

    NULL_POINTER_EXCEPTION(5003, "null pointer exception", "空指针异常");


    /**
     * 错误码
     */
    private int code;
    /**
     * 错误消息
     */
    private String message;
    /**
     * 错误描述信息
     */
    private String description;

    GlobalExceptionEnum(int code, String message, String description) {
        this.code = code;
        this.message = message;
        this.description = description;
    }


    public BaseException getException() {
        return new BaseException(this);
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public String getDescription() {
        return description;
    }
}

